package com.ruoyi.common.core.utils;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName ListPaginator
 * @Author samula
 * @Descripe product by com.doctcloud
 * @Data 2025-04-10 21:50
 **/
public class ListPaginator {

    /**
     * 对列表进行分页操作
     * @param list 要分页的列表
     * @param pageNumber 页码，从 1 开始
     * @param pageSize 每页的记录数
     * @param <T> 列表元素的类型
     * @return 分页后的子列表
     */
    public static <T> List<T> paginate(List<T> list, int pageNumber, int pageSize) {
        if (list == null || list.isEmpty()) {
            return new ArrayList<>();
        }

        // 计算起始索引
        int startIndex = (pageNumber - 1) * pageSize;
        if (startIndex >= list.size()) {
            return new ArrayList<>();
        }

        // 计算结束索引
        int endIndex = Math.min(startIndex + pageSize, list.size());

        // 返回分页后的子列表
        return list.subList(startIndex, endIndex);
    }
    /**
     * 计算列表分页的总页数
     * @param list 要分页的列表
     * @param pageSize 每页的记录数
     * @param <T> 列表元素的类型
     * @return 总页数
     */
    public static <T> int getTotalPages(List<T> list, int pageSize) {
        if (list == null || list.isEmpty()) {
            return 0;
        }
        // 计算总页数
        return (int) Math.ceil((double) list.size() / pageSize);
    }
}